package com.jcode.skeleton.service;

import java.util.List;

import com.jcode.skeleton.model.Page;
import com.jcode.skeleton.model.Pageable;

/**
 * 通用Service
 *
 * @Author dreajay
 * @DateTime 2017年3月26日 下午4:14:03
 *
 */
public interface GenericService {

	/**
	 * 插入对象
	 * 
	 * @param parameter
	 * @return 成功返回1，失败返回0
	 */
	int insert(Object parameter);

	/**
	 * 自定义插入对象
	 * 
	 * @param statement
	 * @param parameter
	 * @return 成功返回1，失败返回0
	 */
	int insert(String statement, Object parameter);

	/**
	 * 更新对象
	 * 
	 * @param parameter
	 * @return
	 */
	int updateByPrimaryKey(Object parameter);

	/**
	 * 自定义更新对象
	 * 
	 * @param statement
	 * @param parameter
	 * @return
	 */
	int update(String statement, Object parameter);

	/**
	 * 删除对象
	 * 
	 * @param parameter
	 * @return
	 */
	int deleteByPrimaryKey(Object parameter);

	/**
	 * 删除对象
	 * 
	 * @param parameter
	 * @return
	 */
	int batchDelete(Object parameter);

	/**
	 * 删除对象
	 * 
	 * @param parameter
	 * @return
	 */
	int delete(String statement, Object parameter);

	/**
	 * 查询对象数目
	 * 
	 * @param parameter
	 * @return
	 */
	int count(Object parameter);

	/**
	 * 自定义查询对象数目
	 * 
	 * @param statement
	 * @param parameter
	 * @return
	 */
	int count(String statement, Object parameter);

	/**
	 * 查询单个对象
	 * 
	 * @param parameter
	 * @return
	 */
	<T> T selectByPrimaryKey(Object parameter);

	/**
	 * 自定义查询单个对象
	 * 
	 * @param statement
	 * @param parameter
	 * @return
	 */
	<T> T selectOne(String statement, Object parameter);

	/**
	 * 查询所有对象
	 * 
	 * @param parameter
	 * @return
	 */
	<T> List<T> selectAll(Object parameter);

	/**
	 * 分页查询
	 * 
	 * @param statement
	 * @param parameter
	 * @return
	 */
	Page selectListByPage(String statement, Pageable parameter);

	/**
	 * 分页查询
	 * 
	 * @param parameter
	 * @return
	 */
	Page selectListByPage(Pageable parameter);

	/**
	 * 自定义查询对象列表
	 * 
	 * @param statement
	 * @param parameter
	 * @return
	 */
	<T> List<T> selectList(String statement, Object parameter);

}
